% Ejercicio "Notación polaca inversa"
\subsection*{\fbox{\theejercicio} - Notaci\'on polaca inversa}

Escribir un programa, mediante LEX y YACC, (incluyendo las definiciones de tipos que sean necesarias) que permita traducir expresiones aritm\'eticas a notaci\'on polaca inversa. Cada expresi\'on consta de una sentencia de asignaci\'on. Los nombres permitidos para las variables constan de una s\'ola letra min\'uscula. Cuando en la parte derecha de una sentencia de asignaci\'on aparece el nombre de una variable a la que previamente no se le ha asignado ning\'un valor, se deber\'a informar y asignarle el valor 0. La pila de YACC debe definirse mediante la instrucci\'on:

\begin{verbatim}
%union {
     struct st {
           int val;
           char car;
     }
     int valor;
     char carac;
}
\end{verbatim}

Para el siguiente fichero de entrada, la salida deber\'a ser:

\begin{center}
\begin{tabular}{|l l|} \hline
ENTRADA          & SALIDA  \\ \hline
{\tt b:= 27;}    & {\tt 27}                     \\
{\tt f:=3+5-b;}  & {\tt b vale 27}              \\
{\tt x:=2+7*b-f} & {\tt 3   5 + b -}            \\
{\tt z:=p;}      & {\tt f vale -19;}            \\
                 & {\tt 2   7 + b * f -}        \\
                 & {\tt x vale 210}             \\
                 & {\tt p variable no definida} \\
                 & {\tt z vale 0}               \\ \hline
\end{tabular}
\end{center}


SUGERENCIA: Utilizar una tabla de s\'{\i}mbolos est\'atica en la que se van almacenando los valores asignados a las distintas variables. Por ejemplo, tras la ejecuci\'on del anterior fragmento, la tabla debe contener los valores:

\begin{center}
\verb@tabla[1]=27;   tabla[5]=-19;   tabla[24]=210,   tabla[26]=0;@
\end{center}

% Solución del ejercicio
\subsubsection*{SOLUCI\'ON}

